package Servicios;

import DAO.DAOCarrera;
import DAO.DAOProgramaEducativo;
import Dominio.Carrera;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GestorDeCarreras extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String tipoEvento = request.getParameter("evento");

        if (tipoEvento.equals("registrar")) {
            registrarCarrera(request, response);
        } else {
            if (tipoEvento.equals("modificar")) {
                modificarCarrera(request, response);
            } else {
                if (tipoEvento.equals("eliminar")) {
                    eliminarCarrera(request, response);
                } else {
                    String respuesta = "Servicio no reconocido";
                    out.println(respuesta);
                }
            }
        }
    }

    private void registrarCarrera(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter out = null;
        String respuesta = null;
        try {
            out = response.getWriter();
            DAOCarrera db_carrera = new DAOCarrera();
            String nombreCarrera = request.getParameter("nombreC");
            String abreviatura = request.getParameter("abrev");
            Carrera carrera = new Carrera(nombreCarrera, abreviatura);

            if (db_carrera.existeCarrera(carrera)) {
                respuesta = "La carrera ingresada ya existe actualmente.";
                out.println(respuesta);
            } else {
                db_carrera.registrarCarrera(carrera);
                respuesta = "La carrera se ha registrado con exito.";
                out.println(respuesta);
            }
            db_carrera.cerrarConexionACarrera();
        } catch (IOException ex) {
            System.out.println("Error en servlet Gestor De Carreras.(Registro)");
        } finally {
            out.close();
        }
    }

    private void modificarCarrera(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter out = null;
        String respuesta = null;
        try {
            out = response.getWriter();
            DAOCarrera db_carrera = new DAOCarrera();
            String nombreActual = request.getParameter("nombreActual");
            String abrevActual = request.getParameter("abrevActual");
            String nombreNuevo = request.getParameter("nombreNuevo");
            String abrevNueva = request.getParameter("abrevNueva");
            Carrera carreraActual = new Carrera(nombreActual, abrevActual);
            Carrera carreraNueva = new Carrera(nombreNuevo, abrevNueva);
            if (db_carrera.existeCarrera(carreraNueva)) {
                respuesta = "La carrera ingresada ya existe actualmente."
                        + "<input type='button' value ='Recargar' id='recargar'>";
                out.println(respuesta);
            } else {
                db_carrera.actualizarCarrera(carreraActual, carreraNueva);
                respuesta = "La carrera se ha guardado con exito."
                        + "<input type='button' value ='Recargar' id='recargar'>";
                out.println(respuesta);
            }
            db_carrera.cerrarConexionACarrera();

        } catch (IOException ex) {
            System.out.println("Error en servlet Gestor De Carreras.(Modificacion)");
        } finally {
            out.close();
        }
    }

    private void eliminarCarrera(HttpServletRequest request, HttpServletResponse response) {
        PrintWriter out = null;
        String respuesta = null;
        try {
            out = response.getWriter();
            DAOCarrera db_carrera = new DAOCarrera();
            String nombreCarrera = request.getParameter("nombreC");
                      
            int claveCarrera = db_carrera.buscarClaveDeCarrera(nombreCarrera);
            
            DAOProgramaEducativo daoProgramaEducativo = new DAOProgramaEducativo();
            
            if(!daoProgramaEducativo.existeProgramaEducativoParaLaCarrera(claveCarrera)) {
            
                db_carrera.eliminarCarrera(nombreCarrera);
                respuesta = "La carrera se ha eliminado con exito."
                            + "<input type='button' value ='Recargar' id='recargar'>";
                out.println(respuesta);
                
            }
            else {
                respuesta = "No se puede eliminar la carrera debido a que tiene un programa educativo asociado";
                out.println(respuesta);
            }
            
            daoProgramaEducativo.cerrarconexionAProgramas();
            db_carrera.cerrarConexionACarrera();
            
             } catch (IOException ex) {
            System.out.println("Error en servlet Gestor De Carreras (Eliminacion).");
        } finally {
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}
